package app

// Crc16 Modbus 信息 CRC16 校验
func Crc16(data []byte) uint16 {
	var crc uint16 = 0xFFFF
	for _, b := range data {
		crc ^= uint16(b)
		for i := 0; i < 8; i++ {
			if crc&0x0001 != 0 {
				crc >>= 1
				crc ^= 0xA001 // Polynomial for Modbus (0x8005 reversed byte order)
			} else {
				crc >>= 1
			}
		}
	}
	return crc
}

// AppendCrc16 原始数据后面添加校验数据
func AppendCrc16(b []byte) []byte {
	checksum := Crc16(b)
	b = append(b, byte(checksum&0xFF), byte(checksum>>8))
	return b
}
